Micron Document
Fox's Git Mirrors

Node / rns-mirrors / Reticulum-Go.git / files / pkg / interfaces / https_race_test.go

Displaying Raw • Download

pkg/interfaces/https_race_test.go 61af5556362c8bdf7c09a1c01bc84f81629f281b (61af5556) Text, 1.24 KB

// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2024-2026 Quad4.io

//go:build !js

package interfaces

import (
"sync"
"sync/atomic"
"testing"
"time"

"quad4/reticulum-go/pkg/common"
)

func TestHTTPSRaceStopSend(t *testing.T) {
port := freeHTTPSPort(t)
srv, err := NewHTTPSServerInterface("https_race_srv", "127.0.0.1", port, HTTPSServerOptions{
Path: "/rns",
LongPoll: 300 * time.Millisecond,
})
if err != nil {
t.Fatal(err)
}
var n atomic.Int32
srv.SetPacketCallback(func([]byte, common.NetworkInterface) { n.Add(1) })
if err := srv.Start(); err != nil {
t.Fatal(err)
}
defer srv.Stop()
port = listenHTTPSPort(t, srv)

cli, err := NewHTTPSClientInterfaceWithRetries("https_race_cli", "127.0.0.1", port, true, 20, HTTPSClientOptions{
Path: "/rns",
LongPoll: 300 * time.Millisecond,
})
if err != nil {
t.Fatal(err)
}
waitOnline(t, cli, 5*time.Second)
waitHTTPSPeers(t, srv, 1, 5*time.Second)

var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
for i := range 60 {
_ = cli.Send([]byte{0x50, byte(i)}, "")
time.Sleep(2 * time.Millisecond)
}
}()
go func() {
defer wg.Done()
time.Sleep(40 * time.Millisecond)
_ = cli.Stop()
}()
wg.Wait()
_ = n.Load()
}

Served by rngit 1.5.2 - Generated in 0.03s